tmt 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/12/2012
					
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
								 
							 | 
						 
					 
			
					 
					 
					
	
			Попробовал вот так.. Но ошибки показывает.. **Элемент "ChildStrategies" не существует в текущем контексте. **Наиболее подходящий перегруженный метод для "StockSharp.Algo.Strategies.StrategyRule<System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>. Do(System.Action<StockSharp.Algo.Strategies.StrategyRule<System.Collections.Generic. IEnumerable<StockSharp.BusinessEntities.MyTrade>>,System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>)"  имеет несколько недопустимых аргументов **Вместе с аргументами-типами нельзя использовать не универсальный тип "System.Collections.IEnumerable" **Аргумент "1": преобразование типа из "группа методов" в "System.Action<StockSharp.Algo.Strategies.StrategyRule<System.Collections.Generic. IEnumerable<StockSharp.BusinessEntities.MyTrade>>,System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>" невозможно Помогите пожалуйста Codenamespace SampleSmartConsole {     using System;     using System.Net;     using System.Linq;     using System.Threading;     using System.Collections;
      using Ecng.Collections;     using Ecng.Common;
      using StockSharp.BusinessEntities;     using StockSharp.Smart;     using StockSharp.Algo;     using StockSharp.Algo.Strategies;
 
      class Program     {         private static Security _instrument;         private static Portfolio _portfolio;         private static MarketDepth _depth;         private static Position _position;
 
              public class buy : Strategy     {         public void OpenPosition()         {             // создаем заявку для открытия длинной позиции             var longPos = this.BuyAtMarket();
              // регистрируем правило, отслеживающее появление новых сделок по заявке             this                 .When(longPos.NewTrades())                 .Do(OnNewOrderTrades)                 .Periodical(() => longPos.IsMatched());
              // отправляем заявку на регистрацию             RegisterOrder(longPos);         }     }
 
      private void OnNewOrderTrades(IEnumerable<MyTrade> trades) {     // для каждой сделки добавляем для защитную пару стратегии     var protectiveStrategies = trades.Select(t =>     {         // выставляет тейк-профит в 40 пунктов         var takeProfit = new TakeProfitStrategy(t, 40);
          // выставляет стоп-лосс в 20 пунктов         var stopLoss = new StopLossStrategy(t, 20);
          return new TakeProfitStopLossStrategy(takeProfit, stopLoss);     });
      ChildStrategies.AddRange(protectiveStrategies); }
 
          static void Main()         {             try             {                 // для теста выбираем бумагу                 const string secCode = "RIH2";
                  //Console.Write("Введите логин: ");                 //var login = Console.ReadLine();                 var login = "ST12858";
                  //Console.Write("Введите пароль: ");                 //var password = Console.ReadLine();                 var password = "8YDJ7E";
                  //Console.Write("Введите номер счета, через который будет выставлена заявка: ");                 //var account = Console.ReadLine();                 var account = "ST12858-RF-01";
                  IPAddress ipadress = IPAddress.Parse("95.131.26.246");                 IPEndPoint ip = new IPEndPoint(ipadress, 8090);                                  using (var waitHandle = new AutoResetEvent(false))                 {                     // создаем шлюз к Smart-у                     using (var trader = new SmartTrader(login, password, ip))                     {                         // подписываемся на событие успешного подключения                         // все действия необходимо производить только после подключения                         trader.Connected += () =>                         {                             Console.WriteLine("Подключение было произведено успешно.");
                              // извещаем об успешном соединени                             waitHandle.Set();                         };
                          Console.WriteLine("Производим подключение...");
                          trader.Connect();
                          // дожидаемся события об успешном соединении                         waitHandle.WaitOne();
                          // подписываемся на все портфели-счета                         trader.NewPortfolios += portfolios =>                         {                             // необходимое условие работы в SmartCOM                             portfolios.ForEach(trader.RegisterPortfolio);
                              if (_portfolio == null)                             {                                 _portfolio = portfolios.FirstOrDefault(p => p.Name == account);
                                  if (_portfolio != null)                                 {                                     Console.WriteLine("Портфель {0} появился.", account);
                                      if (_instrument != null && _depth != null && _position != null)                                         waitHandle.Set();                                 }                             }                         };
                          // подписываемся на событие появление инструментов                         trader.NewPositions += positions =>                         {                             if (_position == null)                             {                                 _position = positions.FirstOrDefault(sec => sec.Security.Code == secCode);                                 if (_position != null)                                 {                                     Console.WriteLine("Информация о портфеле появилась.");                                     if (_portfolio != null && _depth != null && _instrument != null)                                         waitHandle.Set();                                 }                             }                         };                         trader.NewSecurities += securities =>                         {                             if (_instrument == null)                             {                                 // находим инструмент и присваиваем ее переменной _instrument                                 _instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);
                                  if (_instrument != null)                                 {                                     Console.WriteLine("Инструмент появился.");                                     trader.RegisterQuotes(_instrument); // запускаем экспорт стакана                                     if (_portfolio != null && _depth != null && _position != null)                                         waitHandle.Set();                                 }                             }                         };
                          // подписываемся на событие обновления стакана                         trader.QuotesChanged += depths =>                         {                             if (_depth == null && _instrument != null)                             {                                 _depth = depths.FirstOrDefault(d => d.Security == _instrument);
                                  if (_depth != null)                                 {                                     Console.WriteLine("Стакан появился.");
                                      if (_portfolio != null && _position != null)                                        waitHandle.Set();                                 }                             }                         };
                          // подписываемся на событие появления моих новых сделок                         trader.NewMyTrades += myTrades =>                         {                             foreach (var myTrade in myTrades)                             {                                 var trade = myTrade.Trade;                                 Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);                             }                         };
                          Console.WriteLine("Дожидаемся появления в программе инструмента и портфеля {0}...".Put(account));
                          // запускаем экспорт по инструментам и портфелям                         trader.StartExport();
                          // дожидаемся появления портфеля и инструмента                         waitHandle.WaitOne();
                          trader.SecuritiesChanged += securities =>                         {                             // если инструмент хоть раз изменился (по нему пришли актуальные данные)                             if (securities.Contains(_instrument))                                 waitHandle.Set();                         };
                          Console.WriteLine("Дожидаемся обновления данных по инструменту...");
                          // запускаем обновление по инструменту                         trader.RegisterSecurity(_instrument);                         waitHandle.WaitOne();
                          // запоминаем первоначальное значение середины спреда                         var totb = _depth.TotalBidsVolume;                         var tota = _depth.TotalAsksVolume;
                          int maxaskv = 0;                         int maxbidv = 0;                         int maxaskp = 0;                         int maxbidp = 0;                         var asks = _depth.Asks;                         var bids = _depth.Bids;                         for (int i = 0; i < 50; i++)                         {                             if (asks[i].Volume > maxaskv) { maxaskv = (int)asks[i].Volume; maxaskp = (int)asks[i].Price; }                             if (bids[i].Volume > maxbidv) { maxbidv = (int)bids[i].Volume; maxbidp = (int)bids[i].Price; }                             //Console.WriteLine("asks {0}", asks[i].Price);                             //Console.WriteLine("asks {0}", asks[i].Volume);                         }                         Console.WriteLine("maxask {0}", maxaskv);                         Console.WriteLine("maxbid {0}", maxbidv);
                          if (_instrument.BestBid == null)                             throw new Exception("Нет лучшего бида для котировки.");
                          Console.WriteLine("общий объем bid {0}", totb);                         Console.WriteLine("общий объем ask {0}", tota);                         // objem = _instrument.OpenInterest;                         //Console.WriteLine("открытые позиции {0}", objem);                         //Console.WriteLine("asks {0}", asks[0]);
                          while (true)                         {                             var objem = _position.CurrentValue;                             Console.WriteLine("открытые позиции {0}", objem);                                                          // если спред вышел за пределы нашего диапазона                             /*if (totb > tota)                             {*/                                 var order = new Order                                 {                                     Portfolio = _portfolio,                                     Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),                                     Security = _instrument,                                     Volume = 1,                                     Direction = OrderDirections.Sell,                                 };                                 trader.RegisterOrder(order);                                 Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);                                 //break;                             /*}                             else                             {                                 var order = new Order                                 {                                     Portfolio = _portfolio,                                     Price = _instrument.ShrinkPrice(_instrument.BestBid.Price),                                     Security = _instrument,                                     Volume = 1,                                     Direction = OrderDirections.Buy,                                 };                                 trader.RegisterOrder(order);                                 Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);                                 //break;                             }                                 //Console.WriteLine("Текущее значение середины спреда {0:0.##}", _instrument.BestBid.Price + mid);                             */                             // ждем 1 секунду                             Thread.Sleep(1000);                         }
                          // останавливаем экспорт                         trader.StopExport();                     }                 }             }             catch (Exception ex)             {                 Console.WriteLine(ex);             }         }     } }  
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					ak 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/12/2012
					
					
			
					 
					 
					
	
			Форматируйте код (значек справа от "Цитата" - "Выберите тип подсветки кода"), потому что так понять что-либо очень сложно.  - Обработчик OnNewOrderTrades должен быть методом класса стратегии (находиться внутри {}). 
  - Generic тип IEnumerable<Type> принадлежит сборке System.Collections.Generic (using System.Collections.Generic;)
 
 А логин и пароль в коде измененные, правда? Я на это очень надеюсь.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					tmt 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/13/2012
					
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
								 
							 | 
						 
					 
			
					 
					 
					
	
			Спасибо сделал вот так, а насчет логина(пароля) они реальные.. от демки правда.. А как теперь этот класс вызвать? (можно ли так) Code
        public class buy : Strategy
        {
            public void OpenPosition()
            {
                // создаем заявку для открытия длинной позиции
                //var longPos = this.BuyAtMarket();
                var longPos = new Order
                {
                    Portfolio = _portfolio,
                    Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                    Security = _instrument,
                    Volume = 1,
                    Direction = OrderDirections.Sell,
                };
                // регистрируем правило, отслеживающее появление новых сделок по заявке
                this
                .When(longPos.NewTrades())
                .Do(OnNewOrderTrades)
                .Periodical(() => longPos.IsMatched());
                // отправляем заявку на регистрацию
                RegisterOrder(longPos);
            }
            private void OnNewOrderTrades(IEnumerable<MyTrade> trades)
            {
                // для каждой сделки добавляем для защитную пару стратегии
                var protectiveStrategies = trades.Select(t =>
                {
                    // выставляет тейк-профит в 40 пунктов
                    var takeProfit = new TakeProfitStrategy(t, 40);
                    // выставляет стоп-лосс в 20 пунктов
                    var stopLoss = new StopLossStrategy(t, 20);
                    return new TakeProfitStopLossStrategy(takeProfit, stopLoss);
                });
                ChildStrategies.AddRange(protectiveStrategies);
            }
        }
 
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					ak 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/13/2012
					
					
			
					 
					 
					
	
			tmt Спасибо сделал вот так, а насчет логина(пароля) они реальные.. от демки правда.. А как теперь этот класс вызвать? (можно ли так)  А вы сами попробуйте ;-) Не могу сейчас проверить, но насколько я помню родительский класс Strategy содержит конструктор без параметров (или конструктор по умолчанию - не важно). Ваш класс также имеет конструктор по умолчанию - так что такой конструкцией вы создадите объект стратегии. Но вот чтобы ее запустить (заставить работать) надо переопределить (override) как минимум один метод, какой - внимательно читать тут  http://stocksharp.com/do...e0-aba8-0d4b93dea60e.htm
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					tmt 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/13/2012
					
					
			
					 
					 
					
	
			ak tmt Спасибо сделал вот так, а насчет логина(пароля) они реальные.. от демки правда.. А как теперь этот класс вызвать? (можно ли так)  А вы сами попробуйте ;-) Не могу сейчас проверить, но насколько я помню родительский класс Strategy содержит конструктор без параметров (или конструктор по умолчанию - не важно). Ваш класс также имеет конструктор по умолчанию - так что такой конструкцией вы создадите объект стратегии. Но вот чтобы ее запустить (заставить работать) надо переопределить (override) как минимум один метод, какой - внимательно читать тут  http://stocksharp.com/do...e0-aba8-0d4b93dea60e.htm Да так то я уже попробовал)) выяснил что не работает. Сейчас прочту и снова попробую
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Alexander 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/13/2012
					
					
			
					 
					 
					
	
			tmt Да так то я уже попробовал)) выяснил что не работает. Сейчас прочту и снова попробую  У нас если что есть поддержка платная, там на подобные вопросы как раз отвечаем. Это если лень разбираться по документации и примерам.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					tmt 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/13/2012
					
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
								 
							 | 
						 
					 
			
					 
					 
					
	
			Это выходит нужно добавить override примерно вот так, а потом он сам запустится, как вызов метода Strategy.Start произойдет? и условия для открытия уже в OpenPosition нужно добавлять, а не в programm.. Code
        public class buy : Strategy
        {
            public override void OpenPosition()
            {
                // создаем заявку для открытия длинной позиции
                //var longPos = this.BuyAtMarket();
                var longPos = new Order
                {
                    Portfolio = _portfolio,
                    Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                    Security = _instrument,
                    Volume = 1,
                    Direction = OrderDirections.Sell,
                };
                // регистрируем правило, отслеживающее появление новых сделок по заявке
                this
                .When(longPos.NewTrades())
                .Do(OnNewOrderTrades)
                .Periodical(() => longPos.IsMatched());
                // отправляем заявку на регистрацию
                RegisterOrder(longPos);
            }
            private void OnNewOrderTrades(IEnumerable<MyTrade> trades)
            {
                // для каждой сделки добавляем для защитную пару стратегии
                var protectiveStrategies = trades.Select(t =>
                {
                    // выставляет тейк-профит в 40 пунктов
                    var takeProfit = new TakeProfitStrategy(t, 40);
                    // выставляет стоп-лосс в 20 пунктов
                    var stopLoss = new StopLossStrategy(t, 20);
                    return new TakeProfitStopLossStrategy(takeProfit, stopLoss);
                });
                ChildStrategies.AddRange(protectiveStrategies);
            }
        }
 
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					tmt 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/13/2012
					
					
			
					 
					 
					
	
			просмотрев пример sma для quik. Увидел, что сначало объявляется класс SmaStrategy, а потом _strategy присваиваем саму стратегию, после уже _strategy.Start(); Code
_strategy = new SmaStrategy(_candleManager, new SimpleMovingAverage { Length = 80 }, new SimpleMovingAverage { Length = 10 }, _timeFrame)
				{
					Volume = 1,
					Security = _lkoh,
					Portfolio = Portfolios.SelectedPortfolio,
					Trader = _trader,
				};
 Но вот мне не нужны машки... как реализовать?
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					tmt 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/13/2012
					
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
								 
							 | 
						 
					 
			
					 
					 
					
	
			сделал вот так, вроде как должно работать, но ошибка "\"SampleSmartConsole.Program.buy.OpenPosition()\": не найден метод, пригодный для переопределения" Code
namespace SampleSmartConsole
{
	using System;
    using System.Net;
	using System.Linq;
	using System.Threading;
    using System.Collections.Generic;
	using Ecng.Collections;
	using Ecng.Common;
	using StockSharp.BusinessEntities;
	using StockSharp.Smart;
	using StockSharp.Algo;
    using StockSharp.Algo.Strategies;
	class Program
	{
		private static Security _instrument;
		private static Portfolio _portfolio;
        private static MarketDepth _depth;
        private static Position _position;
        private static buy _strategy;
		static void Main()
		{
			try
			{
				// для теста выбираем бумагу
				const string secCode = "RIH2";
				//Console.Write("Введите логин: ");
				//var login = Console.ReadLine();
                var login = "ST12858";
				//Console.Write("Введите пароль: ");
				//var password = Console.ReadLine();
                var password = "8YDJ7E";
				//Console.Write("Введите номер счета, через который будет выставлена заявка: ");
				//var account = Console.ReadLine();
                var account = "ST12858-RF-01";
                IPAddress ipadress = IPAddress.Parse("95.131.26.246");
                IPEndPoint ip = new IPEndPoint(ipadress, 8090);
                
				using (var waitHandle = new AutoResetEvent(false))
				{
					// создаем шлюз к Smart-у
					using (var trader = new SmartTrader(login, password, ip))
					{
						// подписываемся на событие успешного подключения
						// все действия необходимо производить только после подключения
						trader.Connected += () =>
						{
							Console.WriteLine("Подключение было произведено успешно.");
							// извещаем об успешном соединени
							waitHandle.Set();
						};
						Console.WriteLine("Производим подключение...");
						trader.Connect();
						// дожидаемся события об успешном соединении
						waitHandle.WaitOne();
						// подписываемся на все портфели-счета
						trader.NewPortfolios += portfolios =>
						{
							// необходимое условие работы в SmartCOM
							portfolios.ForEach(trader.RegisterPortfolio);
							if (_portfolio == null)
							{
								_portfolio = portfolios.FirstOrDefault(p => p.Name == account);
								if (_portfolio != null)
								{
									Console.WriteLine("Портфель {0} появился.", account);
                                    if (_instrument != null && _depth != null && _position != null)
										waitHandle.Set();
								}
							}
						};
						// подписываемся на событие появление инструментов
                        trader.NewPositions += positions =>
                        {
                            if (_position == null)
                            {
                                _position = positions.FirstOrDefault(sec => sec.Security.Code == secCode);
                                if (_position != null)
                                {
                                    Console.WriteLine("Информация о портфеле появилась.");
                                    if (_portfolio != null && _depth != null && _instrument != null)
                                        waitHandle.Set();
                                }
                            }
                        };
						trader.NewSecurities += securities =>
						{
							if (_instrument == null)
							{
                                // находим инструмент и присваиваем ее переменной _instrument
                                _instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);
								if (_instrument != null)
								{
									Console.WriteLine("Инструмент появился.");
                                    trader.RegisterQuotes(_instrument); // запускаем экспорт стакана
                                    if (_portfolio != null && _depth != null && _position != null)
										waitHandle.Set();
								}
							}
						};
                        // подписываемся на событие обновления стакана
                        trader.QuotesChanged += depths =>
                        {
                            if (_depth == null && _instrument != null)
                            {
                                _depth = depths.FirstOrDefault(d => d.Security == _instrument);
                                if (_depth != null)
                                {
                                    Console.WriteLine("Стакан появился.");
                                    if (_portfolio != null && _position != null)
                                       waitHandle.Set();
                                }
                            }
                        };
						// подписываемся на событие появления моих новых сделок
						trader.NewMyTrades += myTrades =>
						{
							foreach (var myTrade in myTrades)
							{
								var trade = myTrade.Trade;
								Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
							}
						};
						Console.WriteLine("Дожидаемся появления в программе инструмента и портфеля {0}...".Put(account));
						// запускаем экспорт по инструментам и портфелям
						trader.StartExport();
						// дожидаемся появления портфеля и инструмента
						waitHandle.WaitOne();
						trader.SecuritiesChanged += securities =>
						{
							// если инструмент хоть раз изменился (по нему пришли актуальные данные)
							if (securities.Contains(_instrument))
								waitHandle.Set();
						};
						Console.WriteLine("Дожидаемся обновления данных по инструменту...");
						// запускаем обновление по инструменту
						trader.RegisterSecurity(_instrument);
						waitHandle.WaitOne();
						// запоминаем первоначальное значение середины спреда
                        var totb = _depth.TotalBidsVolume;
                        var tota = _depth.TotalAsksVolume;
                        int maxaskv = 0;
                        int maxbidv = 0;
                        int maxaskp = 0;
                        int maxbidp = 0;
                        var asks = _depth.Asks;
                        var bids = _depth.Bids;
                        for (int i = 0; i < 50; i++)
                        {
                            if (asks[i].Volume > maxaskv) { maxaskv = (int)asks[i].Volume; maxaskp = (int)asks[i].Price; }
                            if (bids[i].Volume > maxbidv) { maxbidv = (int)bids[i].Volume; maxbidp = (int)bids[i].Price; }
                            //Console.WriteLine("asks {0}", asks[i].Price);
                            //Console.WriteLine("asks {0}", asks[i].Volume);
                        }
                        Console.WriteLine("maxask {0}", maxaskv);
                        Console.WriteLine("maxbid {0}", maxbidv);
						if (_instrument.BestBid == null)
							throw new Exception("Нет лучшего бида для котировки.");
                        Console.WriteLine("общий объем bid {0}", totb);
                        Console.WriteLine("общий объем ask {0}", tota);
                        // objem = _instrument.OpenInterest;
                        //Console.WriteLine("открытые позиции {0}", objem);
                        //Console.WriteLine("asks {0}", asks[0]);
						while (true)
						{
                            var objem = _position.CurrentValue;
                            Console.WriteLine("открытые позиции {0}", objem);
                            _strategy = new buy();
                            _strategy.Start();
                            //Strategy.Start();
                            /*
							// если спред вышел за пределы нашего диапазона
                            if (totb > tota)
                            {
                                var order = new Order
                                {
                                    Portfolio = _portfolio,
                                    Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                                    Security = _instrument,
                                    Volume = 1,
                                    Direction = OrderDirections.Sell,
                                };
                                trader.RegisterOrder(order);
                                Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
                                //break;
                            }
                            else
                            {
                                var order = new Order
                                {
                                    Portfolio = _portfolio,
                                    Price = _instrument.ShrinkPrice(_instrument.BestBid.Price),
                                    Security = _instrument,
                                    Volume = 1,
                                    Direction = OrderDirections.Buy,
                                };
                                trader.RegisterOrder(order);
                                Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
                                //break;
                            }
								//Console.WriteLine("Текущее значение середины спреда {0:0.##}", _instrument.BestBid.Price + mid);
                            */
							// ждем 1 секунду
							Thread.Sleep(1000);
						}
						// останавливаем экспорт
						trader.StopExport();
					}
				}
			}
			catch (Exception ex)
			{
				Console.WriteLine(ex);
			}
		}
        public class buy : Strategy
        {
            public override void OpenPosition()
            {
                var objem = _position.CurrentValue;
                if (objem == 0)
                {
                    // создаем заявку для открытия длинной позиции
                    //var longPos = this.BuyAtMarket();
                    var longPos = new Order
                    {
                        Portfolio = _portfolio,
                        Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                        Security = _instrument,
                        Volume = 1,
                        Direction = OrderDirections.Sell,
                    };
                    // регистрируем правило, отслеживающее появление новых сделок по заявке
                    this
                    .When(longPos.NewTrades())
                    .Do(OnNewOrderTrades)
                    .Periodical(() => longPos.IsMatched());
                    // отправляем заявку на регистрацию
                    RegisterOrder(longPos);
                }
            }
            private void OnNewOrderTrades(IEnumerable<MyTrade> trades)
            {
                // для каждой сделки добавляем для защитную пару стратегии
                var protectiveStrategies = trades.Select(t =>
                {
                    // выставляет тейк-профит в 40 пунктов
                    var takeProfit = new TakeProfitStrategy(t, 40);
                    // выставляет стоп-лосс в 20 пунктов
                    var stopLoss = new StopLossStrategy(t, 20);
                    return new TakeProfitStopLossStrategy(takeProfit, stopLoss);
                });
                ChildStrategies.AddRange(protectiveStrategies);
            }
        }
	}
}
 
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					vfreeman 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 1/13/2012
					
					
			
					 
					 
					
	
			tmt сделал вот так, вроде как должно работать, но ошибка "\"SampleSmartConsole.Program.buy.OpenPosition()\": не найден метод, пригодный для переопределения" Code
namespace SampleSmartConsole
{
	using System;
    using System.Net;
	using System.Linq;
	using System.Threading;
    using System.Collections.Generic;
	using Ecng.Collections;
	using Ecng.Common;
	using StockSharp.BusinessEntities;
	using StockSharp.Smart;
	using StockSharp.Algo;
    using StockSharp.Algo.Strategies;
}
  возможно не хватает нужного где собственно и реализован метод OpenPosition на нечто подобное недавно наступал
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 |